import { OrganizationTypeEnum } from '@/enums/organizationTypeEnum';
import { OrganizationNode } from '@/api/identity/model';

/** 组织机构DTO */
export interface OrganizationDto {
  /** 组织机构编号 */
  Id: string | bigint;
  /** 组织机构类型 */
  Type: OrganizationTypeEnum;
  /** 组织机构名称 */
  Name: string;
  /** 组织机构描述 */
  Description: string;

  /** 电子头像 */
  Avatar?: string;
  /** 电子签名 */
  Signature?: string;

  /** 组织机构名称（外文） */
  NameFrgn: string;
  /** 地址 */
  Address: string;
  /** 地址（外文） */
  AddressFrgn: string;
  /** 打印抬头 */
  PrintHeader: string;
  /** 打印抬头（外文） */
  PrintHeaderFrgn: string;
  /** 报表名称 */
  ReptName: string;
  /** 报表名称（外文） */
  ReptNameFrgn: string;
  /** 备注 */
  Remark: string;

  /** 顺序编号 */
  OrderNo: number;
  /** 节点树形路径 */
  TreePathString: string;
  /** 父组织机构编号 */
  ParentId: string | bigint | null;

  /** 启用登陆 */
  EnableLogin: boolean;
  /** 默认组织机构 */
  IsDefault: boolean;
  /** 系统组织机构 */
  IsSystem: boolean;

  /** 锁定 */
  IsLocked: boolean;

  /** 创建者编号 */
  CreatorId?: string | bigint | null;
  /** 创建时间 */
  CreatedTime: Date;

  /** 更新者编号 */
  UpdaterId?: string | bigint | null;
  /** 更新时间 */
  UpdatedTime?: Date | null;
}

/** 输出DTO：组织机构信息 */
export interface OrganizationOutputDto {
  /** 组织机构编号 */
  Id: string | bigint;
  /** 组织机构类型 */
  Type: OrganizationTypeEnum;
  /** 组织机构名称 */
  Name: string;
  /** 组织机构描述 */
  Description: string;

  /** 组织机构名称（外文） */
  NameFrgn: string;
  /** 地址 */
  Address: string;
  /** 地址（外文） */
  AddressFrgn: string;
  /** 打印抬头 */
  PrintHeader: string;
  /** 打印抬头（外文） */
  PrintHeaderFrgn: string;
  /** 报表名称 */
  ReptName: string;
  /** 报表名称（外文） */
  ReptNameFrgn: string;
  /** 备注 */
  Remark: string;

  /** 顺序编号 */
  OrderNo: number;
  /** 节点树形路径 */
  TreePathString: string;
  /** 父组织机构编号 */
  ParentId: string | bigint | null;

  /** 启用登陆 */
  EnableLogin: boolean;
  /** 默认组织机构 */
  IsDefault: boolean;
  /** 系统组织机构 */
  IsSystem: boolean;

  /** 锁定 */
  IsLocked: boolean;

  /** 创建者编号 */
  CreatorId?: string | bigint | null;
  /** 创建者名称 */
  CreatorName: string;
  /** 创建者昵称 */
  CreatorNickname: string;
  /** 创建时间 */
  CreatedTime: Date;

  /** 更新者编号 */
  UpdaterId?: string | bigint | null;
  /** 更新者名称 */
  UpdaterName: string;
  /** 更新者昵称 */
  UpdaterNickname: string;
  /** 更新时间 */
  UpdatedTime?: Date | null;

  /** 是否可更新的数据权限状态 */
  Updatable: boolean;
  /** 是否可删除的数据权限状态 */
  Deletable: boolean;
}

/** 组织机构节点 */
export interface OrganizationNodeSimple {
  /** 组织机构编号 */
  Id: string | bigint;

  /** 组织机构类型 */
  Type: OrganizationTypeEnum;
  /** 组织机构名称 */
  Name: string;
  /** 组织机构描述 */
  Description: string;

  /** 顺序编号 */
  OrderNo: number;
  /** 节点树形路径 */
  TreePathString: string;
  /** 父组织机构编号 */
  ParentId: string | bigint | null;

  /** 启用登陆 */
  EnableLogin: boolean;
  /** 锁定 */
  IsLocked: boolean;

  /** 是否选中 */
  IsChecked: boolean;
}

/** 组织机构角色用户节点 */
export interface OrganizationRoleUserNode extends OrganizationNode {
  /** 机构管理员 */
  Administrator: boolean;
  /** 机构经理 */
  Leader: boolean;

  /** 是否选中 */
  IsChecked: boolean;

  /** 是否有子项 */
  HasChildren: boolean;
  /** 子项集合 */
  Items: OrganizationRoleUserNode[];
}

/** 输入DTO：组织机构信息 */
export interface OrganizationInputDto {
  /** 组织机构编号 */
  Id: string | bigint;

  /** 组织机构类型 */
  Type: OrganizationTypeEnum;
  /** 组织机构名称 */
  Name: string;
  /** 组织机构描述 */
  Description: string;

  /** 电子头像 */
  Avatar?: string;
  /** 电子签名 */
  Signature?: string;

  /** 组织机构名称(外文) */
  NameFrgn?: string;
  /** 地址 */
  Address?: string;
  /** 地址(外文) */
  AddressFrgn?: string;
  /** 打印抬头 */
  PrintHeader?: string;
  /** 打印抬头(外文) */
  PrintHeaderFrgn?: string;
  /** 报表名称 */
  ReptName?: string;
  /** 报表名称(外文) */
  ReptNameFrgn?: string;
  /** 备注 */
  Remark?: string;

  /** 顺序编号 */
  OrderNo?: number;
  /** 父组织机构编号 */
  ParentId?: string | bigint | null;

  /** 启用登陆 */
  EnableLogin?: boolean;
  /** 默认组织机构 */
  IsDefault?: boolean;

  /** 是否锁定 */
  IsLocked?: boolean;
}

/** 组织机构用户设置DTO */
export interface OrganizationSetUserDto {
  /** 组织机构编号 */
  OrganizationId: string | bigint;
  /** 组织机构用户DTO */
  OrganizationUsers: OrganizationUserDto[];
}
/** 组织机构用户DTO */
export interface OrganizationUserDto {
  /** 用户编号 */
  UserId: bigint | string;
  /** 机构管理员 */
  Administrator: boolean;
  /** 机构经理 */
  Leader: boolean;
}

/** 组织机构角色设置DTO */
export interface OrganizationSetRoleDto {
  /** 组织机构编号 */
  OrganizationId: string | bigint;
  /** 角色组织机构DTO */
  OrganizationRoles: OrganizationRoleDto[];
}
/** 组织机构角色DTO */
export interface OrganizationRoleDto {
  /** 角色编号 */
  RoleId: string | bigint;
  /** 机构管理员 */
  Administrator: boolean;
  /** 机构经理 */
  Leader: boolean;
}

/** 组织机构节点DTO */
export interface OrganizationNodeDto extends OrganizationOutputDto {
  /** 层级 */
  Level: number;
}
/** 组织机构树形节点DTO */
export interface OrganizationTreeNodeDto extends OrganizationNodeDto {
  /** 是否有子项 */
  HasChildren: boolean;
  /** 子项集合 */
  Items: OrganizationRoleUserNode[];
}
